Network connected devices (e.g., Internet of Things (i.e., IoT) devices) allow remote control and automation of the devices within an environment (e.g., home). However, these devices are often not capable of being fully autonomous. Often users must manually operate the devices in a remote control fashion, or users manually create rules that try to mimic autonomous operations. Additionally, IoT devices are often light functionality devices that do not include enough processing power to perform many types of autonomous decisions. Even if it was possible to perform autonomous operations for a single device, device functionality may be improved by sharing information across many different types of devices. Therefore there exists a need for a way to automate functionality of network connected devices in a generalizable and efficient manner.